この本を見ながら進めてる↓
前回⇒「【Swift奮闘記ep14】参照カウント(ARC・破棄、循環参照、強い参照・弱い参照)」
参照カウントについては理解が浅いまま突っ走ったが、今回イニシャライザについてはちゃんと理解できたらいいなと思っている。
というのもイニシャライザってよく聞く言葉だから重要なんかなって。
イニシャライザ
この本の最初の方にイニシャライザっていう言葉は出てきていて、例えば以下のように変数の型を先に指定する方法をイニシャライザだと思っていたのだが。
1 2 3 4 5 6 7 |
var a = Int() var b = Bool() var c = String() a = 2 b = true c = "hello" |
これはもともとSwiftが持っていた型をつかったイニシャライザを使っただけで、独自で作ったクラス(型)に対してイニシャライザを設定することができるということだ。
どうやら奥が深そうだ。
Helloクラスにイニシャライザを設定してみる。
1 2 3 4 5 6 7 |
class Hello { init() { print("hello") } } let a = Hello() |
上記のように初期値を設定することができた。
次にもっと発展させて、初期値に引数を付ける場合を見ていこう。
1 2 3 4 5 6 7 8 9 |
class Hello { let say: String init(say: String) { self.say = say } } let b = Hello(say: "こんにちは") b.say |
引数sayを用意してあげると、指定した文字列を初期値として出力する型が出来上がるわけだ。(あんまりわかっていない。)
プロパティのsayと因数のsayがごっちゃにならないように注意。
1 2 3 4 5 6 7 8 |
class Hello { deinit { print("終了します") } } var a = Hello() a = Hello() |
Helloクラスのインスタンスを生成
→改めて再生成
→最初に生成したインスタンスが破棄
っていう流れ。
デイニシャライズの他の例として以下のようにオプショナルにラップして、nilと入力してからにした場合も同様にdeinitが実行される。
1 2 3 4 5 6 7 |
class Hello2 { deinit { print("終了します2") } } var b: Hello2? = Hello2() b = nil |
今回はまあまあ理解できた。
ただ、全体的にはまだSwiftとはなんぞやということがわかっていない感じがする。
まだまだ基本的なことが続くがこれを我慢して勉強していけば、きっと希望の光があることを期待して頑張るしかないのだ。ガハハ
続き⇒「【Swift奮闘記ep16】継承について(クラス・イニシャライズの継承、オーバーライド、superキーワード)」
コメント